// PART OF THE MACHINE SIMULATION. DO NOT CHANGE.

package nachos.machine;

import java.io.EOFException;

/**
 * 支持读取、写入和查找的文件
 */
public class OpenFile {
    /**
     * 在指定的文件系统上使用指定的名称分配一个新的 OpenFile 对象
     *
     * @param fileSystem 此文件所属的文件系统
     * @param name       该文件系统上的文件名
     */
    public OpenFile(FileSystem fileSystem, String name) {
        this.fileSystem = fileSystem;
        this.name = name;
    }

    /**
     * 分配一个新的未命名的 OpenFile ，它与任何文件系统都没有关联
     */
    public OpenFile() {
        this(null, "unnamed");
    }

    /**
     * 获取此文件所属的文件系统
     *
     * @return 此文件所属的文件系统
     */
    public FileSystem getFileSystem() {
        return fileSystem;
    }

    /**
     * 获取此打开文件的名称
     *
     * @return 此打开文件的名称
     */
    public String getName() {
        return name;
    }

    /**
     * 从指定位置开始读取此文件，并返回成功读取的字节数
     * 如果由于致命错误而未读取任何字节，则返回 -1
     *
     * @param pos    文件中开始读取的偏移量
     * @param buf    用于存储字节的缓冲区
     * @param offset 缓冲区中开始存储字节的偏移量
     * @param length 要读取的字节数
     * @return 成功读取的实际字节数，或失败时为 -1
     */
    public int read(int pos, byte[] buf, int offset, int length) {
        return -1;
    }

    /**
     * 从指定位置开始写入此文件，并返回成功写入的字节数
     * 如果由于致命错误而未写入字节，则返回 -1。
     *
     * @param pos    文件中开始写入的偏移量
     * @param buf    从中获取字节的缓冲区
     * @param offset 要开始获取的缓冲区中的偏移量
     * @param length 要写入的字节数
     * @return 成功写入的实际字节数，或失败时为 -1
     */
    public int write(int pos, byte[] buf, int offset, int length) {
        return -1;
    }

    /**
     * 获取此文件的长度
     *
     * @return 此文件的长度，如果此文件没有长度，则为 -1
     */
    public int length() {
        return -1;
    }

    /**
     * 关闭此文件并释放所有关联的系统资源
     */
    public void close() {
    }

    /**
     * 设置当前文件指针的值
     */
    public void seek(int pos) {
    }

    /**
     * 获取当前文件指针的值，如果此文件没有指针，则获取 -1
     */
    public int tell() {
        return -1;
    }

    /**
     * 从当前文件指针开始读取此文件，并返回成功读取的字节数
     * 将文件指针前进此数值
     * 如果由于致命错误而无法读取字节，则返回 -1
     *
     * @param buf    用于存储字节的缓冲区
     * @param offset 缓冲区中开始存储字节的偏移量
     * @param length 要读取的字节数
     * @return 成功读取的实际字节数，或失败时为 -1
     */
    public int read(byte[] buf, int offset, int length) {
        return -1;
    }

    /**
     * 从当前文件指针开始写入此文件，并返回成功写入的字节数
     * 将文件指针前进此数值
     * 如果由于致命错误而无法写入字节，则返回 -1
     *
     * @param buf    从中获取字节的缓冲区
     * @param offset 要开始获取的缓冲区中的偏移量
     * @param length 要写入的字节数
     * @return 成功写入的实际字节数，或失败时为 -1
     */
    public int write(byte[] buf, int offset, int length) {
        return -1;
    }

    private FileSystem fileSystem;
    private String name;
}
